Backend - Serviços

Arquitectura

Nesta aplicação utilizou-se o Docker Swarm (ver a secção Serviços para mais informações) no Azure Container Service. O Docker Swarm, utilizando a API do Docker nativa, fornece um ambiente para a implementação de cargas de trabalho de conteúdo através de um conjunto agrupado de anfitriões de Docker.

Diagrama

No diagrama acima, é possivel identificar duas secções no Container Service: Core e Integrações
A aplicação comunica diretamente com o Reverse Proxy CeS. Cada serviço é executado num contentor Docker. Todos os contentores Docker são independentes (possuindo cada um o seu Dockerfile), pelo que a inoperabilidade de um não afeta os restantes.
A orquestração é feita segundo um ficheiro de configuração – docker-compose.yaml.

Contentores Docker:

  • Autenticação RNU - responsável pela validação dos dados. Se forem validos, responde OK e envia uma sms com codigo TOTP pelo serviço da SPMS e faz um novo reply com o codigo TOTP (2-step authentication).
  • Autenticação CMD - redirecciona o cidadão para a pagina Autenticação.GOV. Depois de o cidadão se autenticar, é gerada uma chave.
  • Dispatcher - toda a comunicação da CeS, excepto Telemetria e Autenticação. No futuro, irá fazer a avaliação de Requests e Replies.
  • Notification-Controller - responsável por processar as mensagens do Cluster Redis, armazenar notificações e dados estatísticos na DB e enviar notificações para o serviço Relay.
  • Notification-Relay - responsável por consumir as notificações da fila de mensagens no Redis e enviá-las para o Firebase e para o Apple Push Notification Service.
  • Notification-Service - expõe os endpoints necessários para interagir com o serviço de notificações. Algumas das operações disponibilizadas são por exemplo: a recepção de notificações, subscrição de dispositivos, actualização do estado de entrega de notificações, entre outras.
  • Redis-Cluster - contém um Cluster Redis que serve de cache para as notificações.
  • Redis-MQ - contém uma fila para onde as notificações depois de processadas são enviadas para serem posteriormente consumidas pelo subscritor (o serviço Relay).
  • Logging - auditorias e logs
  • Telemetria - dados estatísticos (quantas pessoas iniciaram sessão, descarregaram cartões, etc)
  • Logging - auditorias e logs

As integrações são os serviços externos, que facilitam o acesso aos servidores SPMS e ADSE. Para tal, criou-se uma interface para cada serviço acedido (RNU, PEM, ADSE). Cada serviço é executado num contentor Docker próprio e isolado. É criada uma rede virtual no Docker para isolar os contentores de integração dos de serviços Core.

No Core do Azure Container Service, encontram-se os serviços que comunicam com a base de dados DocumentDB, responsável pelo armazenamento de logs encriptados para diagnóstico de problemas de funcionamento da aplicação, telemetria, associação (encriptada) do dispositivo ao cidadão e ainda metadatas de cartões, notificações e dispatcher. Estes dados não são armazenados no dispositivo móvel, mas sim da base de dados de backend (DocumentDB).

Dados armazenados na DocumentDB

  • PublicKeys NSNS Collection -
  • Dispatcher Metadate Collection -
  • CartõesMetadata Collection - Apenas guarda dados de Look and Feel - cor, logo etc, não armazenando quaisquer dados pessoais
  • NotificaçõesMetadata Collection
  • Telemetria Collection - dados estatísticos
  • LogAudition Collection - auditorias e logs

Serviços e Tecnologias

Arquitetura CeS

Operations support systems (OSS)

Node.js

É um runtime de Javascript Server-side. Permite trabalhar na mesma linguagem e ambiente no frontend e backend (equipas mais compactas).
É amplamente suportado por muitas empresas comerciais e Node.js Foundation (Linux Foundation), tendo a maior comunidade no GitHub
É utilizado por: PayPal, Netflix, LinkedIn, Uber, IBM

Hapi.Js

Web and services application framework - framework de Node.js para desenvolver serviços baseado na configuração. Criado no Wallmart Labs para responder às necessidade do Wallmart.
É utilizado por: PayPal, Disney, GOV.UK, mozzila, Yahoo, etc

Plugins Hapi.js criados:

Autenticação

  • auth-ces-auth
  • auth-ces-comm
  • auth-ces-dispatcher
  • auth-ces-other

Resposta

  • reply-ces-auth
  • reply-ces-comm
  • reply-ces-handler

PM2

PM2 é um Process Manager de Node.js para aplicações em produção, com balanceador de carga incorporado.
PM2 é um gerenciador de processos de produção para aplicativos Node.js com load balancer incorporado. Facilita as tarefas comuns do administrador do sistema, tais como: criar Cluster aplicacional, Workflows de deployment, Gestão de Logs e Monitorização
É utilizado por: PayPal, Microsoft, IBM, etc

Docker

Docker é um projeto open-source que permite criar um contentor (container) com a infraestrutura que se pretender por forma a poder partilha-la em qualquer máquina e manter sempre o mesmo comportamento. Este contentor contem um sistema operativo Linux lightweight, com o tradicional sistema de ficheiros e politicas de segurança que caracterizam o sistema operativo Linux, utilizando assim menos recursos de memória e espaço em disco. Em suma, permite compartimentalizar serviços e aplicações em qualquer tecnologia e executar em qualquer ambiente. É suportado pelos maiores fornecedores cloud (Amazon, Microsoft, Google).

É utilizado por: PayPal, BBC, eBay, GE, Spotify, ING, etc

DocumentDB / MongoDB

MongoDB
Base de Dados NoSQL open-source e cross-platform, sem esquemas (schemaless), orientado a documentos. Tem um bom suporte de JavaScript e uma grande comunidade.
A informação é guardada no formato JSON.
É utilizado por: Forbes, BOSCH, Facebook, GOV.UK, McAfee, etc.

Azure DocumentDB
Base de Dados semelhante ao MongoDB, mas gerida na Cloud. Pertence à Microsoft Azure platform.

Traefik

Traefik é um reverse proxy HTTP moderno e um controlador de carga (load balancer), desenvolvido para disponibilizar microserviços facilmente. Suporta vários backends (Docker, Kubernetes,...) sendo capaz de gerir a sua configuração de uma forma automática e dinâmica. Trata-se de uma tecnologia recente que tem tido uma enorme aceitação, oferece suporte comercial sendo ideal para sistemas assentes em Docker. Na CeS, é utilizado como reverse proxy para encaminhar os pedidos para os contentores Docker correctos. É utilizado por: Viadeo, Yotpo, Songkick, 3Blades, entre outros.

Redis

Redis é uma estrutura de dados em memória, utilizada como base de dados ou cache. O Redis oferece nativamente replicação e elevada disponibilidade sobre os dados que armazena. Oferece suporte comercial através do RedisLabs e possui uma comunidade activa. No contexto da CeS é utilizado como cache para o armazenamento provisório de notificações e como queue através de um modelo de publish/subscribe, onde o serviço responsável pelo envio das notificações para os diversos dispositivos consome as notificações que são publicadas na queue.

É utilizado por: Twitter, Hipmunk, Airbnb, Codecademy, Uber, entre outros.

NPM modules

Node Package Manager. Todos os módulos criados para as aplicações MySNS podem ser consultados aqui:


Segurança - Bibliotecas e Tools

De modo a facilitar o entendimento da CeS, optou-se por descrever algumas bibliotecas e ferramentas.

Azure Key Vault:

O cofre de chave do Azure ajuda a salvaguardar as chaves criptográficas e os segredos utilizados pelas aplicações em nuvem e pelos serviços.

(RSA) jsrsasign

'jsrsasign' (RSA-Sign JavaScript Library) é uma biblioteca criptográfica opensouce que suporta RSA/RSAPSS/ECDSA/DSA signing/validation, ASN.1, PKCS#1/5/8 private/public key, X.509 certificate, CRL, CMS SignedData, TimeStamp & CAdES e JSON Web Signature(JWS)/Token(JWT)/Key(JWK)

Crypt AES - Crypto-js

Crypto-js é uma biblioteca JavaScript de padrões de criptografia.

Validação de JSON

TOTP

Para a gestão de passwords, utilizou-se o One-Time Password manager. Compativel com HOTP (counter based one time passwords) e TOTP (time based one time passwords). Suporta autenticação de dois fatores.

JSON Web Key (JWK) - para Storage

JSON Web Signature (JWS) - Payload JWE

JSON Web Encryption (JWE) - Payload MessageAction(CeS)

results matching ""

    No results matching ""